package jogoprojetopi;

import s3t.gameElements.AIAction;
import s3t.gameElements.Element;
import s3t.gameControl.system.GameSystem;

public class ControleDaBomba extends AIAction {

    private Bombas bomba;
    private boolean desarmar = false;
    private Element elementoGuia; //elento que ajudará na exclusão da bomba fora do escopo do código
    private long timerDaExplosao = 180000; // tempo que será usado para explodir a bomba
    private int numerodabomba = 1; // usado para auxiliar na animação do tempo da bomba
    private int tempoDeTrocaAnimacao = (int) (timerDaExplosao / 30); // usado para auxiliar na animação do tempo da bomba
    private int tempoDeTrocaAnimacaoAux = (int) (timerDaExplosao / 30); // usado para auxiliar na animação do tempo da bomba

    //Construtor da bomba
    public ControleDaBomba(Bombas bomba)
    {
        this.bomba = bomba;
    }

    //Looping das ações da bomba
    @Override
    public void doAction(Element element)
    {

        this.elementoGuia = element; 

        String imageKey = null;

        //se desarmar não for verdadeiro o tempo para explodir a bomba irá almentando
        if(!desarmar)
        {
            bomba.tempoDeVida = System.currentTimeMillis() - bomba.tempoDeCriacao;
        }
        
        //tempo para bomba explodir
        if (bomba.tempoDeVida > timerDaExplosao)
        {
            if (!desarmar)
            {
                element.delete();
            }

        } 
        else
        {
            //condição que irá fazer a animação do tempo da bomba
            if (bomba.tempoDeVida > tempoDeTrocaAnimacao && numerodabomba < 30 && !desarmar)
            {
                    imageKey = "BombaTempo" + Integer.toString(numerodabomba);
                    numerodabomba++;
                    tempoDeTrocaAnimacao += tempoDeTrocaAnimacaoAux;
            }
        }

        //condição para troca da imagens da bomba
        if (desarmar)
        {
            imageKey = "desarmando";
        }
        else
             // caso desarmar fique falso a bomba voltará a ter a ultima imagem antes de começar a ser desarmada
            imageKey = "BombaTempo" + Integer.toString(numerodabomba);

        element.setImageKey(imageKey);
    }

    @Override
    public void receiveMessage(String message)
    {

        if (message.equals("desarmar"))
        {
            //diz que personagem está desarmando a bomba
            desarmar = true;
            // envia mensagem para a engine, tempo de desarmar de 5 segundos
            GameSystem.getInstance().getAIEngine().sendMessage(elementoGuia, "timeup", 5000);
        }

        if (message.equals("pararDesarmar"))
        {
            //personagem parou de desarmar a bomba
            desarmar = false;
        }

        if (message.equals("timeup"))
        {
            if (desarmar)
            {
                //exclui a bomba desarmada
                elementoGuia.delete();
                
                //adicionar pontos por desarmar bomba
                Jogador.pontos += 25;
            }
        }
    }
}
